<script>
    // 退款申请

        /*
            一、概述

                    在交易完成后的一年内(以支付成功时间为起点+365天计算),若因用户或商户方面导致需要进行订单退款，

                    商户可通过此接口将支付金额的全部或部分原路退还至用户。

                    详细介绍参考：  订单退款---产品介绍  https://pay.weixin.qq.com/doc/v3/merchant/4013071001
                    
                    

                    ★、注意：

                            1、一笔退款最多支持50次部分退款(若许多次部分退款，请更换"商户退款单号" 并间隔1分钟后再次调用)

                            2、在申请退款失败后进行重试时，请务必使用 "原商户退款单号" ，以避免因重复退款而导致的资金损失。

                            3、同一商户号下，此接口调用成功的频率限制为  150QPS，而调用失败报错时的频率限制为6QPS。

                            4、申请退款接口返回成功仅表示退款单已受理成功，具体的退款结果依据 "退款结果通知" 及 "查询退款" 的返回信息为准。

                                     退款结果通知   https://pay.weixin.qq.com/doc/v3/merchant/4013071196

                                     查询退款       https://pay.weixin.qq.com/doc/v3/merchant/4013071041

                            5、若一个月前的订单申请退款时返回报错 “频率限制，1个月之前的订单请降低申请频率再重试”  ,请调整退款时间，再使用原参数进行重试。
        */

        /*
            二、接口说明

                    1、支持商户：【普通商户】

                    2、请求方式：【POST】/v3/refund/domestic/refunds

                    3、请求域名：
                                【主域名】https://api.mch.weixin.qq.com 使用该域名将访问就近的接入点

　　　　　                       【备域名】https://api2.mch.weixin.qq.com 使用该域名将访问异地的接入点 ，指引点击查看
        */

        /*
            三、请求参数


                    1、Header  HTTP头参数

                                <1>、Authorization 　必填　string
                                            请参考签名认证生成认证信息 https://pay.weixin.qq.com/doc/v3/merchant/4012365342#1.1-%E8%AF%B7%E6%B1%82%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E6%8E%A5%E5%8F%A3

                                <2>、Accept 　必填　string
                                            请设置为application/json

                                <3>、Content-Type 　必填　string
                                            请设置为application/json

                    2、body  包体参数

                                <1>、 transaction_id 　选填   string(32)

                                            【微信支付订单号】 微信支付侧订单的唯一标识，订单支付成功后，查询订单和支付成功回调通知会返回该参数。
                                            transaction_id和out_trade_no必须二选一进行传参。
                                    
                                <2>、 out_trade_no 　选填   string(32)

                                            【商户订单号】 商户下单时传入的商户系统内部订单号。
                                            transaction_id和out_trade_no必须二选一进行传参。

                                <3>、out_refund_no 　必填   string(64)

                                            【商户退款单号】 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-|*@ ，
                                            同一商户退款单号多次请求只退一笔。不可超过64个字节数。

                                <4>、reason 　选填   string(80)

                                            【退款原因】 若商户传了退款原因，该原因将在下发给用户的退款消息中显示，具体展示可参见退款通知UI示意图。(https://pay.weixin.qq.com/doc/v3/merchant/4013071001s)
                                            请注意：1、该退款原因参数的长度不得超过80个字节；2、当订单退款金额小于等于1元且为部分退款时，退款原因将不会在消息中体现。

                                <5>、 notify_url 　选填   string(256)
                                            【退款结果回调url】 异步接收微信支付退款结果通知的回调地址，通知url必须为外网可访问的url，不能携带参数。 
                                            如果传了该参数，则商户平台上配置的回调地址（商户平台-交易中心-退款管理-退款配置）将不会生效，优先回调当前传的这个地址。

                                <6>、 funds_account 　选填   string
                                            【退款资金来源】 若传递此参数则使用对应的资金账户退款。

                                            可选取值：
                                                    ①、AVAILABLE: 仅对旧资金流商户适用(请参考旧资金流介绍区分)，传此枚举指定从可用余额账户出资，否则默认使用未结算资金退款。
                                                    ②、UNSETTLED: 仅对出行预付押金退款适用，指定从未结算资金出资。

                                <7>、 amount 　必填   object
                                            【金额信息】订单退款金额信息

                                             ★、属性：

                                                    ①、 refund 　必填   integer
                                                                【退款金额】 退款金额，币种的最小单位，只能为整数，不能超过原订单支付金额

                                                    ②、 from 　选填   array[object]
                                                                【退款出资账户及金额】退款需从指定账户出资时，可传递该参数以指定出资金额（币种最小单位，仅限整数）。
                                                                 
                                                                ★、多账户出资退款需满足：
                                                                        1、未开通退款支出分离功能；
                                                                        2、订单为待分账或分账中的分账订单。

                                                                ★、传递参数需确保：
                                                                        1、基本账户可用与不可用余额之和等于退款金额；
                                                                        2、账户类型不重复。不符条件将返回错误


                                                                ★、属性：

                                                                        1、account 　必填   string

                                                                                【出资账户类型】 退款出资的账户类型。

                                                                                可选取值：
                                                                                    AVAILABLE : 可用余额
                                                                                    UNAVAILABLE : 不可用余额

                                                                        2、amount 　必填   integer
                                                                                【出资金额】对应账户出资金额

                                                    ③、total 　必填   integer
                                                                【原订单金额】 原支付交易的订单总金额，币种的最小单位，只能为整数

                                                    ④、currency 　必填   string(16)
                                                                【退款币种】  符合ISO 4217标准的三位字母代码，固定传：CNY，代表人民币。


                                <8>、goods_detail   选填   array[GoodsDetail]

                                                    【退款商品】 

                                                    请填写需要指定退款的商品信息，所指定的商品信息需要与下单时传入的单品列表 goods_detail 中的对应商品信息一致，

                                                    如无需按照指定商品退款，本字段不填。

                                                    ★、属性：

                                                           <1>、merchant_goods_id 　必填   string(32)
                                                                    【商户侧商品编码】 订单下单时传入的商户侧商品编码。

                                                           <2>、 wechatpay_goods_id   选填  string(32)
                                                                    【微信侧商品编码】 订单下单时传入的微信侧商品编码（没有可不传）

                                                           <3>、goods_name            选填    string(256)
                                                                    【商品名称】 订单下单时传入的商品名称。

                                                           <4>、unit_price 　           必填   integer
                                                                    【商品单价】 订单下单时传入的商品单价。

                                                           <5>、refund_amount 　        必填   integer
                                                                    【商品退款金额】 商品退款金额，单位为分

                                                           <6>、refund_quantity 　必填   integer
                                                                    【商品退货数量】 对应商品的退货数量

                    3、请求示例
                    
                                    curl -X POST \
                                    https://api.mch.weixin.qq.com/v3/refund/domestic/refunds \
                                    -H "Authorization: WECHATPAY2-SHA256-RSA2048 mchid=\"1900000001\",..." \
                                    -H "Accept: application/json" \
                                    -H "Content-Type: application/json" \
                                    -d '{
                                        "transaction_id" : "1217752501201407033233368018",
                                        "out_trade_no" : "1217752501201407033233368018",
                                        "out_refund_no" : "1217752501201407033233368018",
                                        "reason" : "商品已售完",
                                        "notify_url" : "https://weixin.qq.com",
                                        "funds_account" : "AVAILABLE",
                                        "amount" : {
                                        "refund" : 888,
                                        "from" : [
                                            {
                                            "account" : "AVAILABLE",
                                            "amount" : 444
                                            }
                                        ],
                                        "total" : 888,
                                        "currency" : "CNY"
                                        },
                                        "goods_detail" : [
                                        {
                                            "merchant_goods_id" : "1217752501201407033233368018",
                                            "wechatpay_goods_id" : "1001",
                                            "goods_name" : "iPhone6s 16G",
                                            "unit_price" : 528800,
                                            "refund_amount" : 528800,
                                            "refund_quantity" : 1
                                        }
                                        ]
                                    }'

        */

       /*
            四、返回参数

                        1、HTTP状态码

                                200 OK

                        2、Data：

                                ①、 refund_id 　必填   string(32)
                                            【微信支付退款单号】申请退款受理成功时，该笔退款单在微信支付侧生成的唯一标识。

                                ②、 out_refund_no 　必填   string(64)
                                            【商户退款单号】 商户申请退款时传的商户系统内部退款单号。

                                ③、 transaction_id 　必填   string(32)
                                            【微信支付订单号】微信支付侧订单的唯一标识。

                                ④、out_trade_no 　必填   string(32)
                                            【商户订单号】 商户下单时传入的商户系统内部订单号。

                                ⑤、 channel 　必填   string
                                            【退款渠道】 订单退款渠道

                                                ★、以下枚举：
                                                            ORIGINAL:       原路退款
                                                            BALANCE:        退回到余额
                                                            OTHER_BALANCE:  原账户异常退到其他余额账户
                                                            OTHER_BANKCARD: 原银行卡异常退到其他银行卡(发起异常退款成功后返回)

                                ⑥、user_received_account 　必填   string(64)

                                            【退款入账账户】 取当前退款单的退款入账方，有以下几种情况：

                                                1、退回银行卡：         {银行名称}{卡类型}{卡尾号}
                                                2、退回支付用户零钱:    "支付用户零钱"
                                                3、退还商户:            "商户基本账户商户结算银行账户"
                                                4、退回支付用户零钱通:   "支付用户零钱通"
                                                5、退回支付用户银行电子账户: "支付用户银行电子账户"
                                                6、退回支付用户零花钱:      "支付用户零花钱"
                                                7、退回用户经营账户:        "用户经营账户"
                                                8、退回支付用户来华零钱包:   "支付用户来华零钱包"
                                                9、退回企业支付商户:        "企业支付商户"
                                                10、退回支付用户小金罐:     "支付用户小金罐"

                                ⑨、success_time 　  选填    string(64)
                                            【退款成功时间】 
                                                    1、定义：退款成功的时间，该字段在退款状态status为SUCCESS（退款成功）时返回。
                                                    2、格式：遵循rfc3339标准格式：yyyy-MM-DDTHH:mm:ss+TIMEZONE。yyyy-MM-DD 表示年月日；
                                                            T 字符用于分隔日期和时间部分；HH:mm:ss 表示具体的时分秒；
                                                            TIMEZONE 表示时区（例如，+08:00 对应东八区时间，即北京时间）。
                                                    示例：2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。

                                ⑩、 create_time 　必填   string(64)
                                            【退款创建时间】
                                                    1、定义：提交退款申请成功，微信受理退款申请单的时间。
                                                    2、格式：遵循rfc3339标准格式：yyyy-MM-DDTHH:mm:ss+TIMEZONE。
                                                            yyyy-MM-DD 表示年月日；T 字符用于分隔日期和时间部分；
                                                            HH:mm:ss 表示具体的时分秒；TIMEZONE 表示时区（例如，+08:00 对应东八区时间，即北京时间）。
                                                    示例：2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。

                                ⑪、 status 　必填   string
                                            【退款状态】退款单的退款处理状态。
                                                    SUCCESS: 退款成功
                                                    CLOSED: 退款关闭
                                                    PROCESSING: 退款处理中
                                                    ABNORMAL: 退款异常，退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，
                                                              可前往商户平台-交易中心，手动处理此笔退款，
                                                              可参考： 退款异常的处理（https://kf.qq.com/faq/140225MveaUz150107mAVz6F.html），
                                                                    或者通过"发起异常退款接口"(https://pay.weixin.qq.com/doc/v3/merchant/4013071193)进行处理。
                                                    注：状态流转说明请参考状态流转图 (https://pay.weixin.qq.com/doc/v3/merchant/4013071031#3%E3%80%81%E9%80%80%E6%AC%BE%E5%8D%95%E7%8A%B6%E6%80%81%E6%B5%81%E8%BD%AC%E5%9B%BE)

                                ⑫、funds_account 　必填   string
                                            【资金账户】 退款所使用资金对应的资金账户类型
                                                    UNSETTLED: 未结算资金
                                                    AVAILABLE: 可用余额
                                                    UNAVAILABLE: 不可用余额
                                                    OPERATION: 运营账户
                                                    BASIC: 基本账户（含可用余额和不可用余额）
                                                    ECNY_BASIC: 数字人民币基本账户

                                ⑬、 amount 　必填   object
                                            【金额信息】订单退款金额信息
                                            ★、属性：

                                                    1、 total 　必填   integer
                                                                【订单金额】 订单总金额，单位为分

                                                    2、refund 　必填   integer
                                                                【退款金额】退款金额，单位为分，只能为整数，可以做部分退款，不能超过原订单支付金额。

                                                    3、 from 　  选填    array[object]
                                                                【退款出资账户及金额】 退款出资的账户类型及金额信息，若此接口请求时未传该参数，则不会返回。

                                                                 ★、属性：

                                                                         account 　必填   string
                                                                                【出资账户类型】下面枚举值多选一。
                                                                                枚举值：
                                                                                    AVAILABLE : 可用余额
                                                                                    UNAVAILABLE : 不可用余额

                                                                         amount 　必填   integer
                                                                                【出资金额】 对应账户出资金额，单位为分

                                ⑮、payer_total 　必填   integer
                                            【用户实际支付金额】用户现金支付金额，整型，单位为分，例如10元订单用户使用了2元全场代金券，则该金额为用户实际支付的8元。

                                ⑯、payer_refund 　必填   integer
                                            【用户退款金额】 指用户实际收到的现金退款金额，数据类型为整型，单位为分。
                                                            例如在一个10元的订单中，用户使用了2元的全场代金券，若商户申请退款5元，
                                                            则用户将收到4元的现金退款(即该字段所示金额)和1元的代金券退款。

                                                            注：部分退款用户无法继续使用代金券，只有在订单全额退款且代金券未过期的情况下，
                                                            且全场券属于银行立减金用户才能继续使用代金券。
                                                            详情参考含优惠退款说明。


                                ⑰、settlement_refund 　必填   integer
                                            【应结退款金额】 去掉免充值代金券退款金额后的退款金额，整型，单位为分，
                                                            例如10元订单用户使用了2元全场代金券(一张免充值1元 + 一张预充值1元)，商户申请退款5元，
                                                            则该金额为 退款金额5元 - 0.5元免充值代金券退款金额 = 4.5元。

                                ⑱、 settlement_total 　必填   integer
                                            【应结订单金额】去除免充值代金券金额后的订单金额，整型，单位为分，
                                                            例如10元订单用户使用了2元全场代金券(一张免充值1元 + 一张预充值1元)，则该金额为 订单金额10元 - 免充值代金券金额1元 = 9元。

                                ⑲、discount_refund 　必填   integer
                                            【优惠退款金额】 申请退款后用户收到的代金券退款金额，整型，单位为分，
                                                            例如10元订单用户使用了2元全场代金券，商户申请退款5元，用户收到的是4元现金 + 1元代金券退款金额(该字段) 。

                                ⑳、 currency 　必填   string(16)
                                            【退款币种】 固定返回：CNY，代表人民币。

                                ⑳、refund_fee 　  选填    integer
    ·                                       【手续费退款金额】 订单退款时退还的手续费金额，整型，单位为分，例如一笔100元的订单收了0.6元手续费，
                                                             商户申请退款50元，该金额为等比退还的0.3元手续费。

                                 ⑮、promotion_detail 　选填   array[object]

                                            【优惠功能】 代金券信息，当订单有使用代金券时，该字段将返回所使用的代金券信息

                                                ★、属性：

                                                        1、coupon_id 　必填  string(32)
                                                                        【券ID】 代金券id，微信为代金券分配的唯一标识，创券商户调用发放指定批次的代金券时返回的代金券ID coupon_id。

                                                        2、name 　必填   string(64)

                                                                        【优惠名称】 优惠名称，创券商户创建代金券批次时传入的批次名称stock_name。

                                                                        "创建代金券批次"（https://pay.weixin.qq.com/doc/v3/merchant/4012534633）

                                                        3、scope 　选填  string(32)

                                                                        【优惠范围】优惠活动中代金券的适用范围，分为两种类型：

                                                                                ①、GLOBAL：全场代金券-以订单整体可优惠的金额为优惠门槛的代金券；

                                                                                ②、SINGLE：单品优惠-以订单中具体某个单品的总金额为优惠门槛的代金券

                                                        4、type 　选填  string(32)

                                                                        【优惠类型】代金券资金类型，优惠活动中代金券的结算资金类型，分为两种类型：

                                                                                ①、CASH：预充值-带有结算资金的代金券，会随订单结算给订单收款商户；

                                                                                ①、NOCASH：免充值-不带有结算资金的代金券，无资金结算给订单收款商户；

                                                        5、 amount 　必填   integer

                                                                        【优惠券面额】代金券优惠的金额。

                                                        6、stock_id 　选填   string(32)

                                                                        【活动ID】单张代金券所对应的批次号

                                                        7、wechatpay_contribute 　选填   integer

                                                                        【微信出资】 代金券有三种出资类型： 微信出资、商户出资、其他出资。

                                                                        本参数将返回选择 "微信出资类型" 时的优惠券面额。

                                                                        ①、创建代金券后默认为 "商户出资类型" 。如需要使用其他两种类型，请与相关行业运营进行沟通。

                                                                        ②、在 wechatpate_contribute 、merchant_contribute、other_contribute 这三个字段中，仅有一个字段会返回出资金额。

                                                                        具体返回哪个字段取决于代金券批次的配置。

                                                        8、merchant_contribute 　选填   integer
                                                        
                                                                        【商户出资】代金券有三种出资类型：微信出资、商户出资和其他出资。
                                                                        
                                                                        本参数将返回选择“商户出资类型”时的优惠券面额。
                                                                        
                                                                                ①、创建代金券后默认为商户出资类型。如需使用其他两种类型，请与相关行业运营进行沟通。

                                                                                ②、在 wechatpay_contribute、merchant_contribute 和 other_contribute 这三个字段中，仅有一个字段会返回出资金额。
                                                                                
                                                                                        具体返回哪个字段取决于代金券批次的配置。

                                                        9、other_contribute 　选填   integer

                                                                        【其他出资】代金券有三种出资类型：微信出资、商户出资和其他出资。

                                                                        本参数将返回选择“其他出资类型”时的优惠券面额。

                                                                                1、创建代金券后默认为商户出资类型。如需使用其他两种类型，请与相关行业运营进行沟通。

                                                                                2、在 wechatpay_contribute、merchant_contribute 和 other_contribute 这三个字段中，仅有一个字段会返回出资金额。
                                                                                
                                                                                        具体返回哪个字段取决于代金券批次的配置。

                                                        10、currency 　选填   string(16)

                                                                        【优惠币种】 代金券金额所对应的货币种类：固定为：CNY，人民币。


                                                        11、 goods_detail 　选填   array[object]
                                                                        【单品列表】 单品列表。scope为SINGLE（单品优惠）时返回该参数
                                                                        ★、属性：
                                                                                ①、goods_id 　必填   string(32)
                                                                                        【商品编码】 商品编码。
                                                                                ②、quantity 　必填   integer
                                                                                        【商品数量】 商品数量。
                                                                                ③、unit_price 　必填   integer
                                                                                        【商品单价】 商品单价，单位为分。
                                                                                ④、discount_amount 　必填   integer
                                                                                        【商品优惠金额】 商品优惠金额。
                                                                                ⑤、goods_remark 　选填   string(128)
                                                                                        【商品备注】创券商户在商户平台创建单品券时，若设置了商品备注则会返回。

                                                    
                        ★、响应示例
                                                                
                                        {
                                                "refund_id" : "50000000382019052709732678859",
                                                "out_refund_no" : "1217752501201407033233368018",
                                                "transaction_id" : "1217752501201407033233368018",
                                                "out_trade_no" : "1217752501201407033233368018",
                                                "channel" : "ORIGINAL",
                                                "user_received_account" : "招商银行信用卡0403",
                                                "success_time" : "2020-12-01T16:18:12+08:00",
                                                "create_time" : "2020-12-01T16:18:12+08:00",
                                                "status" : "SUCCESS",
                                                "funds_account" : "UNSETTLED",
                                                "amount" : {
                                                        "total" : 100,
                                                        "refund" : 100,
                                                        "from" : [
                                                                {
                                                                        "account" : "AVAILABLE",
                                                                        "amount" : 444
                                                                }
                                                        ],
                                                        "payer_total" : 90,
                                                        "payer_refund" : 90,
                                                        "settlement_refund" : 100,
                                                        "settlement_total" : 100,
                                                        "discount_refund" : 10,
                                                        "currency" : "CNY",
                                                        "refund_fee" : 100
                                                },
                                                "promotion_detail" : [
                                                        {
                                                                "promotion_id" : "109519",
                                                                "scope" : "GLOBAL",
                                                                "type" : "COUPON",
                                                                "amount" : 5,
                                                                "refund_amount" : 100,
                                                                "goods_detail" : [
                                                                        {
                                                                                "merchant_goods_id" : "1217752501201407033233368018",
                                                                                "wechatpay_goods_id" : "1001",
                                                                                "goods_name" : "iPhone6s 16G",
                                                                                "unit_price" : 528800,
                                                                                "refund_amount" : 528800,
                                                                                "refund_quantity" : 1
                                                                        }
                                                                ]
                                                        }
                                                ]
                                        }
       */

       /*
            五、错误码
                        
                        （页面最底部）
                        https://pay.weixin.qq.com/doc/v3/merchant/4012791862

                        1、公共错误码

                        2、业务错误码
       */
</script>